package com.sky.config;

import com.sky.properties.AliOssProperties;
import com.sky.utils.AliOssUtil;
import lombok.extern.slf4j.Slf4j;
import org.springframework.boot.autoconfigure.condition.ConditionalOnMissingBean;
import org.springframework.context.annotation.Bean;
import org.springframework.context.annotation.Configuration;

/**
 * 配置类 用于创建AliOssUtil对象
 */
@Configuration
@Slf4j
public class OssConfiguration {

    @Bean //将当前方法的返回值对象交给IOC容器管理, 成为IOC容器bean
    //通过@Bean注解的name/value属性指定bean名称, 如果未指定, 默认是方法名
    //如果我们在声明第三方bean对象的时候，需要依赖注入怎么办  直接指定对应的方法形参，spring会自动的去IOC容器查找，并完成自动装配
    @ConditionalOnMissingBean //加上该注解保证spring容器中只有一个对象
    //@ConditionalOnMissingBean //，如果我们加上了这个注解，什么都不做配置，就代表，不存在该类型的bean，才会将该bean加入IOC容器  --还可以根据指定的 类型(value属性) 或者 名称(name属性) 来判断
    //该注解表示 判断当前spring环境中有没有对应的bean，如果没有对应的bean才会注册bean到IOC容器当中
    //@ConditionalOnMissingBean 该注解通常都是用来设置一个默认的bean对象 那什么是默认的bean对象 默认的bean对象指的就是，如果用户自己定义了这个类型的bean，就用他自己定义的，默认的就不会生效
    //如果他们没有自己定义，还想使用这个类型的bean ，此时就使用我们定义的这个默认类型的bean
    public AliOssUtil aliOssUtil(AliOssProperties aliOssProperties) {
        log.info("开始创建阿里云文件上传工具类对象:{}", aliOssProperties);
        return new AliOssUtil(aliOssProperties.getEndpoint(),
                aliOssProperties.getAccessKeyId(),
                aliOssProperties.getAccessKeySecret(),
                aliOssProperties.getBucketName());
    }
}
